Development Tips
	Game is using too much ram but assets are small
		Let your game marinate for a moment, ram use should drop to ~160mb after 10sec
		Graphics loading uses alot of ram but that frees itself once unneeded
	Game looks bad
		Hire an artist or try swapping out the deafult assets
		Menu and UI are stored as .png files while fonts use .ttf
		If your UI doesnt line up with your text you can adjust padding with the padding variable in pages.rb
	Game wont let me use more than 300mb ram
		Use less than 300mb ram
	My character heights dont fit properly
		The camera is by default 6ft above the ground and has a 5'3"x2'11" view window
		Character feet position is 6'3" below the default height
		Size your characters with a 1inch^2 = 15.41px^2 with no padding and your characters should fit properly

Minimum Specs
	macOS
		4ms frame times
		Apple M1
		Apple M1
		300mb free ram
		50mb free SSD

Lua Functions
	Winter.
		checkButton(x, y)					check a position on the screen and return the ID of a pressed button, or nil
		pushButton(x, x2, y, y2, id)		push a button to the buttons vector
		clearButtons()						clear the buttons table
		checksum(string)					return the calculated the checksum of a provided string
		getClock()							return the number of milliseconds since it was last called, or since the programme started
		getPath() 							retrun a string containing the current working path
		translateRunes(string)				return a string converted to Azmyrian rune encoding
		translateAnglish(string)			return a string in Anglish
		processRunes(string)				check a sting if it needs processing then strip tags and pass it to Winter.translateRunes()
		processAnglish(string)				check a sting if it needs processing then strip tags and pass it to Winter.translateAnglish()
		capture(string, bool)				run a command on the os terminal and return the output, if bool is false clean up the output
		hexDump(string)						convert a string to hex for easy debugging
		jsonEncode(table)					convert a lua table to a json string for easy debugging
		loadImage(path)						sdl binding
		textureImage(surface)				sdl binding
		mirrorSurface(surface)				mirror a surface
		wrapSurface(surface, x)				cut up a surface into x length chunks and stack them
		round(number, decimals)				round a number to a length of decmial places
		clamp(number, minimum, maximum)		clamp a number to stay within a provided range
		findID(table, id)					find a position in a table that contains id at .identifier, return -1 if none are found
		renderStack()						render the renderQueue
		openAudio(string, id)				open audio file, return audio index and success boolean
		playAudio(number, boolean, number)	play audio at specified index and timestamp, boolean loops, return success boolean and track length
		pauseAudio(number)					pause audio at a specified index, return progress
		freeAudio()							clear a track index
		clearAudio()						clear audio vector
		getGlobalTime()						return the number of milliseconds since the programme started
		between(number, minimum, maximum)	return true if a number is between 2 numbers

	Ruby.					!!!Memory management not handled by Lua!!!
		runScript(string)	return the output of a ruby script

	Metal.									!!!Memory management not handled by Lua!!!
		createWindow(string, width, height)	create a window, returns metal window pointer
		loadPNG(path)						load a png file, returns metal texture pointer
		infoTexture(texture)				check the size of a texture and return the width, height
		drawTexture(texture, x, y, colour)	draw a texture to the screen
		alert(title, warning)				throw a warning the user must confirm

Lua Variables
	fasle					false
	fsale					false
	flse					false
	WINTER_
		WINDOW				metal window data
		MOUSE_
			NIL				lua number pointer for internal operations
			LEFT			lua number pointer for internal operations
			MIDDLE			lua number pointer for internal operations
			RIGHT			lua number pointer for internal operations
		SKIP				lua number pointer for internal operations
		IMAGE				lua number pointer for internal operations
		TEXT				lua number pointer for internal operations
		TEXT_SLIDE_
			RIGHT			lua number pointer for internal operations
			LEFT			lua number pointer for internal operations
		CHARACTER1			lua number pointer for internal operations
		CHARACTER2			lua number pointer for internal operations
		CHARACTER3			lua number pointer for internal operations
		CHARACTER4			lua number pointer for internal operations
		PARALLAX_			lua number pointer for internal operations
			UIFG			lua bool for internal operations, set to true to make foreground render over UI
			FG				lua bool for internal operations
		BACKGROUND			lua number pointer for internal operations
		INTERFACE			lua number pointer for internal operations
		MESSAGE				lua number pointer for internal operations
		DATE				lua number pointer for internal operations
		TIME				lua number pointer for internal operations
		NAME				lua number pointer for internal operations
		TITLE				lua number pointer for internal operations
		LOCATION			lua number pointer for internal operations
		REGION				lua number pointer for internal operations
		MENU_
			MAIN			lua number pointer for internal operations
			PAUSE			lua number pointer for internal operations
			SAVE			lua number pointer for internal operations
			OPTION			lua number pointer for internal operations
		GAME_
			VISUAL_NOVEL	lua number pointer for internal operations
		CREDIT				lua number pointer for internal operations
		NEW_GAME			lua number pointer for internal operations
		LOAD_GAME			lua number pointer for internal operations
		RENDER_
			1				lua render stack variable
			2				lua render stack variable
			3				lua render stack variable
			4				lua render stack variable
			5				lua render stack variable
			6				lua render stack variable
			7				lua render stack variable
			8				lua render stack variable
			9				lua render stack variable
			10				lua render stack variable
			11				lua render stack variable
			12				lua render stack variable
			13				lua render stack variable
			S1				lua render stack variable
			S2				lua render stack variable
			S3				lua render stack variable
			S4				lua render stack variable
			S5				lua render stack variable
			S6				lua render stack variable
			S7				lua render stack variable
			S8				lua render stack variable
			S9				lua render stack variable
			S10				lua render stack variable
			S11				lua render stack variable
			S12				lua render stack variable
			S13				lua render stack variable
		TMP					free variables for misc functions
			0
			1
			2
			3
			4
			5
			6
			7
			8
			9
	window					sdl pointer for the open window
	renderer				sdl pointer for the renderer
	framecolour				framebuffer base colour
	debugger				enable debug functions
	input					input events table
	framerate				the current target framerate in milliseconds per frame
	yOffset					the current y position of the camera
	chatboxX				how farm from the edges of the screen text will be rendered
	frames					how many frames have been rendered since enabling the debugger
	mode					the current render mode
	renderQueue				the current render stack
	oldQueue				vestigial feature
	parallaxPoints			table for stroing data related to parallax backgrounds
	c
		strawberry			default colour data
		brownink			default colour data
		white				default colour data
		black				default colour data
	append					file path prefix for user graphics
	nobmp					global image path for failed fallbacks
	vnui					built in image path for use in fallbacks
	testbg					built in image path for use in fallbacks
	testmenu				built in image path for use in fallbacks
	blankpc					built in image path for use in fallbacks
	hyenajpeg				built in image path for use in fallbacks
	plastic					built in image path for use in fallbacks
	Yorktown				built in parallax background paths for use in fallbacks
	NorthCarolina			built in parallax background paths for use in fallbacks
	YorktownParallax		built in parallax points for use in fallbacks
	NorthCarolinaParallax	built in parallax points for use in fallbacks
	testf					60pt built in pirated font for debugging
	azmyrian				60pt built in anglosaxon + latin font
	cenan					60pt built in chinese font
	iapakan					60pt built in japanese font
	nomyrian				60pt built in korean font
	vastan					60pt built in cyrillic font
	midrick					60pt built in nonsense font
	medium
		testf				38pt built in pirated font for debugging
		azmyrian			38pt built in anglosaxon + latin font
		cenan				38pt built in chinese font
		iapakan				38pt built in japanese font
		nomyrian			38pt built in korean font
		vastan				38pt built in cyrillic font
		midrick				38pt built in nonsense font
	small
		testf				24pt built in pirated font for debugging
		azmyrian			24pt built in anglosaxon + latin font
		cenan				24pt built in chinese font
		iapakan				24pt built in japanese font
		nomyrian			24pt built in korean font
		vastan				24pt built in cyrillic font
		midrick				24pt built in nonsense font
	pages					table containing visual novel page data
	rwby					the ruby table containing visual novel page data
	latched					internal boolean to prevent endless loops
	drawFrame				boolean for drawing the scene
	page
		Change				boolean for page changes
		num					the current page number
	running					boolean for if the programme shoudl continue running
	pressed					id of the current button pressed
	savestring				the user save file
	playlist				table pointing to the current playlist
	oldAudio				audio latch
	append					package filepath
	loadOffset				audio start timestamp for save loading
	offset					temporary number for audio loading

Lua Data Structures
	renderQueue		{identifier = id, surface = sdl surface, texture = sdl texture, text = string, text2 = string, x = number, y = number, fw = number, w = number, h = number, colour = hex, type = id, font = sdl font}
	pages			{height = number, speed = number, padding = number, text = string, ftext = sdl font, time = string, ftime = sdl font, date = string, fdate = sdl font, location = string, flocation = sdl font, region = string, fregion = sdl font, name = string, fname = sdl font, title = string, ftitle = sdl font, background = string, backgroundFallback = string, ui = string, uiFallback = string, char1 = string, char1Fallback = string, char2 = string, char2Fallback = string, char3 = string, char3Fallback = string, char4 = string, char4Fallback = string, music = number, musicFallback = number, action = id, actionPath = lua code block}
	parallaxPoints	{number, float, float, float, float, number}
	oldQueue		{identifier = id, surface = sdl surface, texture = sdl texture, text = string, text2 = string, x = number, y = number, fw = number, w = number, h = number, colour = hex, type = id, font = sdl font}
	playlist		{string, number}
	fonts			{font light user data, number}

graphics.lua


Ruby Functions
	lua_key_pairs(hash)				convert a ruby hash to a lua table
	dFeet(feet, inches)				return the imperial decimal of a provided height
	dMetres(metres, centimetres)	return the imperial decimal of a provided height
	calcHeight(feet)				return the pixel offset of a provided height
Ruby Variables
	pages	visual novel page data

Ruby Data Structures
	pages			{height = number, speed = number, padding = number, text = string, ftext = string, time = string, ftime = string, date = string, fdate = string, location = string, flocation = string, region = string, fregion = string, name = string, fname = string, title = string, ftitle = string, background = string, backgroundFallback = string, ui = string, uiFallback = string, char1 = string, char1Fallback = string, char2 = string, char2Fallback = string, char3 = string, char3Fallback = string, char4 = string, char4Fallback = string, music = string, musicFallback = string, action = string, actionPath = string}

pages.rb
	Strings info
		Place a string within        "' '"         to pass a string to lua
		Place a string within   <runes> </runes>   to convert to anglish runes
		Place a string within <anglish> </anglish> to convert to anglish language
		Place a string within         " "          to pull a variable from lua
		Use                          "nil"         instead of nil

	Valid fonts
		azmyrian       (60pt)
		cenan          (60pt)
		iapakan        (60pt)
		nomyrian       (60pt)
		iapakan        (60pt)
		midrick        (60pt)
		mediumazmyrian (38pt)
		mediumcenan    (38pt)
		mediumiapakan  (38pt)
		mediumnomyrian (38pt)
		mediumiapakan  (38pt)
		mediummidrick  (38pt)
		smallazmyrian  (24pt)
		smallcenan     (24pt)
		smalliapakan   (24pt)
		smallnomyrian  (24pt)
		smalliapakan   (24pt)
		smallmidrick   (24pt)

	Height info
		The standard camera offset is 70.59 inches above the ground
		Height input works off 1 inch =  15.41 pixels
							or 1 foot = 184.95 pixels

		The input number should mutiplied by 184.95 if using the provided feet
		Upon load the number will added to the base 1088 pixels offset
		Inputting -5.5 feet will lower the camera by 1017.23 pixels
		Inputting  3.7 feet will raise the camera by  684.23 pixels

		Use the following formulas to calculate the required input
		Character imperial height formula:					feet	+	(inches / 12)				or		dFeet(feet, inches)
		Character metric   height formula:	(metres * 3.280839895)	+	(centimetres * 0.032808399)	or	dMetres(metres, centimetres)

		The speed input controls what percent of the distance will be travelled per frame (60fps locked)
		10% speed is reccomened for smooth movement

	Music info
		Assign the currently playing track with a number corresponding to the playlist
		musicFallback is the offset in milliseconds where the track should begin playing from

		Keep in mind that changing the page to one that matches the currently playing track will not restart the track
		Switching from the menu to a page matching the menu music will continue playing the track from the menu
		Loading a save file will continue playing the track from the point it was when the game was saved

	Paralalxing notes
		{
			start offset,
			     skybox     move rate,
			   background   move rate,
			character layer move rate,
			   foreground   move rate,
			max offset,
		}

	Actions info

	Date formats
		Azmyri calendar
			Date	[day 1-31]<monthXX>[year]<eramark>[era]
					16<month11>45<eramark>57
			ᚠ	30 <month01>
			ᚢ	30 <month02>
			ᚦ	30 <month03>
			ᚩ	30 <month04>
			ᚱ	30 <month05>
			ᚳ	30 <month06>
			ᚷ	30 <month07>
			ᚹ	30 <month08>
			ᚻ	30 <month09>
			ᚾ	30 <month10>
			ᛄ	30 <month11>
			ᛇ	30 <month12>
			ᛈ	30 <month13>
			ᛉ	30 <month14>
			ᚴ	30 <month15>
			ᛏ	30 <month16>
			ᛒ	30 <month17>
			ᛖ	30 <month18>
			ᛗ	30 <month19>
			ᛚ	30 <month20>
			ᛝ	30 <month21>
			ᛟ	31 <month22>
			ᛞ	30 <month23>
			ᚪ	30 <month24>
			ᚫ	30 <month25>
			ᛠ	30 <month26>
			ᚣ	30 <month27>
			ᛣ	30 <month28>
			ᚸ	30 <month29>
			ᛥ	30 <month30>